package metier.sess;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;

import metier.entities.Annonceur;
import metier.entities.Client;
import metier.entities.TransportCat;
import metier.entities.Utilisateur;



@Stateless(name="Utilisateur")
public class UtilisateurEJBImpl implements IUtilisateurLocal,IUtilisateurRemote{
	@PersistenceContext(unitName="PU_Cargaison")
	private static EntityManager em;
	
	
	@Override
	public void addUtilisateur(Utilisateur a) {
		System.out.println(a);
		em.persist(a);
	}

	@Override
	public List<Utilisateur> getAllUtilisateurs() {
		Query req=em.createQuery("select u from Utilisateur u");
		return req.getResultList();
	}

	@Override
	public Utilisateur getUtilisateur(Integer Id) {
		Utilisateur an=em.find(Utilisateur.class,Id);
		if(an==null)throw new RuntimeException("utilisateur introuvable");
		return an;
	}

	@Override
	public void updateUtilisateur(Utilisateur a) {
		
		em.merge(a);
		
	}

	@Override
	public void deleteUtilisateur(Integer Id) {
		em.remove(getUtilisateur(Id));
		
	}

	
	
	
	//liste des clients
	@Override
	public List<Client> listClient(String Type,String Category)
	{
		Query req=em.createQuery("select c from Client c where c.TranExp='"+Type+"' and c.Type_client='"+Category+"'");
		return req.getResultList();
	}
	
    
	//supprimer les gln qui appartiennent à un client 
	@Override	
public void deletegln(Integer Id)
{
	Client c=(Client) getUtilisateur(Id);
	for(int i=0;i<c.getList_GLN().size();i++)
	{
		System.out.println("sup"+c.getList_GLN().get(i).getNumero_GLN());
		em.remove(c.getList_GLN().get(i));
	}
}
	
	//liste des clients
	@Override
	public List<Client> getAllclients() {
		Query req=em.createQuery("select u from Client u");
		return req.getResultList();
	}
	// utilisé dans la génération du cid
	@Override
	public List<Client> lastCID(String Type)
	{
		Query req=em.createQuery("select u from Client u  where u.TranExp='"+Type+"' ORDER BY u.CID   ASC");
         return req.getResultList();
	}
	
	//liste des transporteur
	@Override
	public List<Client> listeTransporteur()
	{
		
		Query req=em.createQuery("select u from Client u  where u.TranExp='Tra' and Statut=true ");
        return req.getResultList();
         
	}

	@Override
	public Utilisateur getUtilisateurUserName(Utilisateur user) {
		// TODO Auto-generated method stub
		return null;
	}
//i=0 pour un client et 1 pour employé
	@Override
	public Utilisateur getUtilisateurUserName(Utilisateur user, Integer i) {
		String a="";
		if(i==0)
		{
			
			a=" and u.CID="+((Client)user).getCID();
		}
		
	
		Query req=em.createQuery("select u from Utilisateur u where u.username='"+user.getUsername()+"' and u.password='"+user.getPassword()+"'"+a);
		System.out.println("select u from Utilisateur u where u.username='"+user.getUsername()+"' and u.password='"+user.getPassword()+"'"+a);
		List<Utilisateur> l= req.getResultList();
		if(l.size()==0)
			return null;
			else
		return (Utilisateur) l.get(0);
	}
	
	
	
	

	

}
